package com.jyr.ohs.service;

import com.jyr.ohs.common.UnifiedJsonReturn;
import com.jyr.ohs.entity.*;
import com.jyr.ohs.mapper.TeacherMapper;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 * @author ZhongJing </p>
 * @Description 管理员的Service层 </p>
 * @date 2021/4/13 11:44 上午 </p>
 */
public interface AdminService {

    /**
     * 根据传入的用户名和密码验证登陆，如果用户名不存在则返回用户名不存在，如果密码错误则显示密码错误，如果登陆成功则显示登陆成功
     *
     * @param username 用户名
     * @param password 密码
     * @return 返回统一的JSON格式串
     */
    UnifiedJsonReturn<Admin> login(String username, String password);

    /**
     * 管理员注册
     *
     * @param username 用户名
     * @param password 密码
     * @return 返回统一的JSON格式
     */
    UnifiedJsonReturn<Admin> regist(String username, String password);

    /**
     * 修改密码
     *
     * @param admin 管理员信息
     * @return 返回统一JSON格式
     */
    UnifiedJsonReturn<Admin> modificationPassword(Admin admin);

    /**
     * 添加学生信息
     *
     * @param student 学生具体信息
     * @return 返回统一JSON格式
     */
    UnifiedJsonReturn<Student> addStudent(Student student);

    /**
     * 修改学生信息
     *
     * @param student 学生信息
     * @return 返回统一JSON格式
     */
    UnifiedJsonReturn<Student> updateStudent(Student student);

    /**
     * 获取所有课程信息，带模糊查询（根据课程名）
     * @param name 课程名
     * @return 返回课程信息组成的集合
     */
    List<Course> getAllCourseLikeName(String name);

    /**
     * 根据id获取课程信息
     * @param id 课程id
     * @return 存在返回课程信息，不存在返回null
     */
    Course getCourseById(Integer id);

    /**
     * 添加课程
     *
     * @param course 课程具体信息
     * @return 返回统一JSON格式
     */
    UnifiedJsonReturn<Course> addCourse(Course course);

    /**
     * 修改课程信息
     *
     * @param course 课程信息
     * @return 返回统一JSON格式
     */
    UnifiedJsonReturn<Course> updateCourse(Course course);

    /**
     * 删除课程信息
     * @param id 要删除课程的id
     * @return 返回统一JSON格式
     */
    UnifiedJsonReturn<Course> deleteCourse(Integer id);

    /**
     * 根据班级id查询班级信息
     * @param id 要查询的班级id
     * @return 如果存在返回班级对象，如果不存在返回null
     */
    Grade getGradeById(Integer id);

    /**
     * 添加班级
     *
     * @param name 班级名称
     * @return 统一JSON格式
     */
    UnifiedJsonReturn<Grade> addGrade(String name);

    /**
     * 修改/更新班级信息
     *
     * @param grade 班级信息
     * @return 统一JSON格式
     */
    UnifiedJsonReturn<Grade> updateGrade(Grade grade);

    /**
     * 获取所有班级信息，带模糊查询（根据班级名称）
     *
     * @param name 用于模糊查询的名称
     * @return 班级信息组成的集合，如果没有班级会返回null
     */
    List<Grade> getAllGrade(String name);

    /**
     * 删除班级信息
     * @param id 要删除班级的id
     * @return 返回统一JSON格式
     */
    UnifiedJsonReturn<Grade> deleteGrade(Integer id);

    /**
     * 添加教师信息
     *
     * @param teacher 教师信息
     * @return 统一JSON格式
     */
    UnifiedJsonReturn<Teacher> addTeacher(Teacher teacher);

    /**
     * 根据教师id查询对应教师信息
     *
     * @param id 教师id
     * @return 如果存在返回教师信息，如果不存在返回null
     */
    Teacher getTeacherById(Integer id);

    /**
     * 修改教师信息
     *
     * @param teacher 教师信息
     * @return 返回统一JSON格式
     */
    UnifiedJsonReturn<Teacher> updateTeacher(Teacher teacher);

    /**
     * 根据id删除教师信息
     *
     * @param id 要删除的教师id
     * @return 返回统一JSON格式
     */
    UnifiedJsonReturn<Teacher> deleteTeacher(Integer id);

    /**
     * 根据学号模糊查询学生信息
     *
     * @param id 学号
     * @return 返回查询到的学生的集合
     */
    List<Student> getStudentListLikeId(String id);

    /**
     * 根据ID删除学生信息
     *
     * @param id 学生ID（学号）
     * @return 返回统一JSON数据
     */
    UnifiedJsonReturn<Student> deleteStudentById(String id);

    /**
     * 根据id查询对应学生
     *
     * @param id 学生id
     * @return 如果该id学生存在返回学生信息，如果不存在返回null
     */
    Student getStudentById(String id);

    /**
     * 查询所有教师，带分页，带模糊查询（根据名字）
     *
     * @param name 用于模糊查询的名字，如果为空则查询全部
     * @return 返回教师组成的集合
     */
    List<Teacher> getTeacherListLikeName(String name);

}
